export default {
	namespaced: true, //命名空间必须写
	state: {
		scoketTask: null,
		timeoutObj:null,
		serverTimeoutObj:null,
		timeout:3000
	},
	getters: {
	
	},
	//唯一修改state值的方法 
	// commit
	mutations: {
		//心跳检测
		startHeart(state) {
			state.timeoutObj = setTimeout(() => {
				//这里发送一个心跳，后端收到后，返回一个心跳消息，
				//onmessage拿到返回的心跳就说明连接正常
				state.scoketTask.send("ping");
				console.log("ping!")
				state.serverTimeoutObj = setTimeout(() => { //如果超过一定时间还没重置，说明后端主动断开了
					state.scoketTask.close(); //如果onclose会执行reconnect，我们执行state.scoketTask.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
				}, state.timeout)
			}, state.timeout)
		},
		//清除定时器
		clearTime(state) {
			clearTimeout(state.timeoutObj);
			clearTimeout(state.serverTimeoutObj);
		},
		connectSocket(state) {
			console.log("开始连接！")
			state.scoketTask = uni.connectSocket({ //192.168.31.156自己,192.168.1.18
				url: `ws://192.168.1.18:8081/hbh`,
				success(res) { //这里不是连接成功，而是这个api方法调用成功，真他妈的坑啊
					console.log("api方法调用成功", res)
				},
				header: {
					'content-type': 'application/json'
				},
				fail(err) {
					console.log("报错", err)
				}
			})
			//监听webscoket是否已打开
			state.scoketTask.onOpen((res) => { //这里才能知道websocket是否打开了。注意了
				console.log(res, "websocket打开了")
				// this.clearTime()
				// this.startHeart()
				// this.connectionStatus = true
			})
			//接收内容
			state.scoketTask.onMessage((res) => {
				console.log(res)
				// this.clearTime()
				// this.startHeart()
		
			});
		
			//监听WebSocket连接打开失败,其实监听了服务器自己断开事件，我们主动再次发起连接
			state.scoketTask.onError((res) => {
				console.log('WebSocket连接打开失败，请检查！');
				// this.reconnect()
		
			})
			// // 监听连接关闭 -因该是客户端主动关闭
			state.scoketTask.onClose((e) => {
				console.log('WebSocket连接关闭！');
			})
		
		},
		
	},
	// 异步的操作
	// dispatch
	actions: {
	
		// //创建websocket连接

		// createWebSocket() {
		// 	try {
		// 		this.connectSocket()
		// 	} catch (e) {
		// 		this.reconnect();
		// 		console.log(e);
		// 	}
		// },
		// //设置节流，避免重复连接websocket
		// reconnect() {
		// 	// if (this.lockReconnect) return;
		// 	// this.lockReconnect = true;
		// 	// setTimeout(() => { //没连接上会一直重连，设置延迟避免请求过多
		// 	// 	this.createWebSocket();
		// 	// 	this.lockReconnect = false;
		// 	// }, 2000);
		// },
		// //连接webscoket
		
		// startHeart() {
		// 	this.timeoutObj = setTimeout(() => {
		// 		//这里发送一个心跳，后端收到后，返回一个心跳消息，
		// 		//onmessage拿到返回的心跳就说明连接正常
		// 		console.log("客户端执行了这里")
		// 		state.scoketTask.send("ping");
		// 		console.log("ping!")
		// 		this.serverTimeoutObj = setTimeout(() => { //如果超过一定时间还没重置，说明后端主动断开了
		// 			state.scoketTask
		// 		.close(); //如果onclose会执行reconnect，我们执行state.scoketTask.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
		// 		}, this.timeout)
		// 	}, this.timeout)
		// },
		// clearTime() {
		// 	clearTimeout(this.timeoutObj);
		// 	clearTimeout(this.serverTimeoutObj);
		// },
		// //主动关闭
		// websocketClose() {
		// 	state.scoketTask.close()
		// },
		// //发送消息
		// sendMessage(val) {
		// 	return new Promise((resolve, reject) => {
		// 		state.scoketTask.send({
		// 			data: JSON.stringify(val), //data只能发送字符串
		// 			success(res) {
		// 				console.log('发送成功', res)
		// 				resolve({
		// 					code: 200,
		// 					msg: res
		// 				})
		// 			},
		// 			fail(err) {
		// 				console.log('发送失败', err)
		// 				reject({
		// 					code: 200,
		// 					msg: err
		// 				})
		// 			}
		// 		});
		// 	})
		// }
	}
}